/*
 * 版权声明 (c) 2025 XXX科技有限公司
 *
 * 本软件及其相关文档文件受版权保护。未经版权所有者明确书面许可，任何单位或个人不得
 * 以任何形式复制、传播、修改、出售、出租、反向工程、反编译或利用本软件的任何部分。
 *
 * 对于任何违反本声明的行为，版权所有者保留追究法律责任的权利。
 */

#include "agent_module.h"
#include <chrono>
#include <context.h>
#include <iostream>
#include <sync_module.h>


AgentModule::AgentModule(Context &context, const string &module_name) : Module(context, module_name), sockfd(0) {
	// 初始化其他成员变量
	Logger::info("😄 " + Module::module_name + " constructed ...");
}

AgentModule::~AgentModule() { Logger::info("💔 " + module_name + " destructed ..."); }

bool AgentModule::Init() {
	Logger::info("✈️  " + Module::module_name + " initializing ...");

	const string ip = ctx.Conf().agentIP;
	const int port  = ctx.Conf().agentPort;
	Logger::info("   Server is running " + ip + ":" + to_string(port));
	return true;
}

void AgentModule::Start() {
	Logger::info("🚀 " + module_name + " starting...");
	running = true;

	// 启动同步任务服务
	sync_handle();
}

void AgentModule::Stop() {
	running = false;
	Logger::info("🚫 " + module_name + " stopped ...");
}

void AgentModule::sync_handle() const {
	cout << "\n====== ⭐️⭐️⭐️ 跨模块调用 ⭐️⭐️⭐️ ======" << endl;
	const auto sync_module = dynamic_cast<SyncModule *>(ctx.Mod(MODULE_SYNC));
	if (sync_module && running) {
		// 调用同步模块的OnProcess方法和IntervalSec属性
		sync_module->OnProcess(sync_module->IntervalSec);
	}
}
